Skip to main content

Utilizzo di Depictor per visualizzare i gruppi di assi

Per questo progetto è necessario anche il CODESYS Depictor componente aggiuntivo con una licenza valida.

L'applicazione SoftMotion è costituita da quattro azionamenti rotativi configurati come gruppo di assi. I primi tre assi spostano il TCP nel piano X/Y e il quarto asse nel piano Z.

L'esempio mostra come è possibile utilizzare Depictor con la configurazione cinematica Kin_Scara3_Z. È possibile personalizzare la stessa procedura anche per altre configurazioni cinematiche.

_sm_img_dep.png

Creazione del progetto standard

  1. Crea un progetto standard con il CODESYS SoftMotion Win controller e il linguaggio di programmazione ST.

  2. Aggiungi un gestore di libreria nel POU Visualizza.

  3. Apri il Gestore della libreria e aggiungi le librerie SM3_Depictor e DepictorBase.

Aggiunta e parametrizzazione degli assi

  1. Inserisci quattro assi virtuali sotto l'oggetto Pool di assi generali SoftMotion e denominare gli assi Drive1...Drive4.

  2. Parametrizzare gli assi Drive1, Drive2, Drive3 e Drive4 come tipo di asse finito con finecorsa software da -180 gradi a 180 gradi.

    Editor di configurazione:

    _sm_img_depictor_drives.png

Per ulteriori informazioni, vedere: Unità virtuale

Configurazione dei gruppi di assi

  1. Aggiungi un gruppo di assi "KinScara" sotto l'applicazione. Per fare ciò, fare clic su Progetto → Aggiungi oggetto → Gruppo di assi.

  2. Nel configuratore, fare clic su Seleziona cinematica. Seleziona il TRAFO.Kin_Scara3_Z cinematica.

  3. Definire i parametri come segue:

    • dArmLength1, dArmLength2, dArmLength3: 500

    • dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0

  4. Ordina gli assi come segue:

    • A1: Drive1

    • la2: Drive2

    • LA3: Drive3

    • Z: Drive4

    Nota: è possibile trascinare gli assi direttamente nel campo di immissione.

Per ulteriori informazioni, vedere: Cinematica

Creazione del programma del controller

  1. Nel PLC_PRG programma, dichiarare le istanze di MC_Power blocco funzione per tutti gli azionamenti. Creare un istate variabile per il diagramma di stato.

    VAR
     Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power;
     istate: INT;
    END_VAR
  2. Definire un diagramma di stato nell'implementazione.

    CASE istate OF
     0:
     1:
     2:
    END_CASE
  3. Attiva tutte le unità in stato 0.

    0:
     Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
     IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
      istate:=istate+1;
     END_IF
  4. Quando gli assi sono attivati, abilitare il gruppo di assi (passaggio da "disattivato" a "standby").

    VAR
     GroupEnable:MC_GroupEnable;
    END_VAR
    
    1:
     GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);
     IF GroupEnable.Done THEN
      istate:=istate+1;
     END_IF
  5. Dichiarare e inizializzare una variabile per salvare il valore impostato nelle coordinate macchina. Dichiara due istanze di tipo SMC_POS_REF per rappresentare il TCP in coordinate cartesiane e assi.

    VAR
     Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
     Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
     Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates
    END_VAR
    VAR CONSTANT
     axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
    END_VAR
    
    2:
     Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
  6. Dichiarare un'istanza di MC_MoveDirectAbsolute per spostare il robot SCARA alle coordinate specificate.

    VAR
     MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates
    END_VAR
    
    2:
     MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates
     //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates
    
     IF MoveAbs.Done THEN
             MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
       istate:=2;
            END_IF
  7. Dichiarare una variabile di tipo SMC_GroupReadSetPosition per leggere il valore corrente del robot in coordinate cartesiane e coordinate assi.

    VAR
     Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values
    END_VAR
    
    2:
     Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates
     Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values

L'intero programma PLC_PRG

Confronta il tuo programma e aggiungi le parti di programma mancanti.

Dichiarazione

PROGRAM PLC_PRG
VAR
    Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power;
    istate: INT;

    GroupEnable:MC_GroupEnable;

    Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
    Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
    Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates

    MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP)

    Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu

    scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z
    kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used
    nPeriod:DINT:=0; // SCARA_3_Z Period
    Xelbow:BOOL:=TRUE;

END_VAR
VAR CONSTANT
    axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
END_VAR

Implementazione

CASE istate OF

0:
 Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);
 Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE);

 IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN
  istate:=istate+1;
 END_IF

1:
 GroupEnable(AxisGroup:=KinScara, Execute:=TRUE);

 IF GroupEnable.Done THEN
  istate:=istate+1;
 END_IF

2:
 scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod);
 kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE);
 Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates

 Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates
 Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates

 MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates
 //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates

 IF MoveAbs.Done THEN
  MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates
  istate:=2;
 END_IF
END_CASE

Creazione di un programma Depictor

  1. Aggiungere una nuova POU "Depic" di tipo "Programma" sotto l'applicazione. Per fare ciò, fare clic su Progetto → Aggiungi oggetto → POU.

  2. Dichiarare una variabile di tipo SM3_Depictor.SMC_R_Scara3_Z_Data. Dichiarare una variabile LrSize di tipo LREAL e inizializzare la variabile con il valore di 100.

    VAR
     ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data;
     LrSize:LREAL:=100;
    END_VAR
  3. Inserire una chiamata al blocco funzione nell'implementazione.

    ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
  4. Aggiungi il POU "Depic" al Compito principale.

Configurazione del visualizzatore

  1. Aggiungi un oggetto "Depictor" sotto l'applicazione. Per fare ciò, fare clic su Progetto → Aggiungi oggetto → Rappresentante.

  2. Fare doppio clic sull'oggetto.

  3. Seleziona il Posa elemento nell'albero di rappresentazione.

  4. Clic Rappresentante → Aggiungi elemento.

    Il Scatola l'elemento viene aggiunto sotto la posa.

  5. Seleziona il Rif. raffigurante opzione nelle proprietà dell'elemento.

  6. Clicca il _cds_icon_three_dots.png pulsante.

  7. Seleziona il SMC_R_Depictor_Scara3_Z oggetto dal SM3_Depictor biblioteca.

  8. Definire le variabili di interfaccia come segue:

    • fb: Depic.ScaraTrafo

    • lrZ_: Drive1.fSetPosition

    • lrZmin: 10

    • lrZmax: -50

    • lrSize: Depic.LrSize

    • xShowPlane: 0

Creazione di visualizzazioni

Creare una schermata di visualizzazione in cui è possibile visualizzare e modificare le coordinate cartesiane e le coordinate degli assi.

_sm_img_depictor_visu.png
  1. Aggiungi un oggetto "Visualizzazione" sotto l'applicazione. Per fare ciò, fare clic su Progetto → Aggiungi oggetto → Visualizzazione.

  2. Apri la visualizzazione nell'editor.

  3. Inserisci a Rettangolo elemento di visualizzazione (1).

  4. Modificare le proprietà dell'elemento.

    • Testi → Testo: %S

    • Variabili di testo → Variabile di testo: PLC_PRG.Car_pos.Position.c.X

    • Configurazione ingressi → OnMouseDown → Scrivi variabile

      • Tipo di ingresso: VisuDialogs.Tastierino numerico

      • Usa un'altra variabile: PLC_PRG.Frame.X

  5. Inserisci l'altro Scatola elementi di visualizzazione.

  6. Modificare le proprietà degli elementi (2) e (3).

    • Testi → Testo: %S

    • Variabili di testo → Variabile di testo: PLC_PRG.Car_pos.Position.c.Y o PLC_PRG.Car_pos.Position.c.Z

    • Configurazione ingressi → OnMouseDown → Scrivi variabile

      • Tipo di ingresso: VisuDialogs.Tastierino numerico

      • Usa un'altra variabile: PLC_PRG.Frame.Y e PLC_PRG.Frame.Z

  7. Modificare le proprietà degli elementi (4), (5) e (6).

    • Testi → Testo: %S

    • Variabili di testo → Variabile di testo: PLC_PRG.Frame.A o PLC_PRG.Frame.B o PLC_PRG.Frame.C

  8. Modificare le proprietà degli elementi (7), (8), (9) e (10).

    • Testi → Testo: %S

    • Variabili di testo → Variabile di testo: PLC_PRG.Axis_pos.Position.a.a0 o PLC_PRG.Axis_pos.Position.a.a1 o PLC_PRG.Axis_pos.Position.a.a2 o PLC_PRG.Axis_pos.Position.a.a3

    • Configurazione ingressi → OnMouseDown → Scrivi variabile

      • Tipo di ingresso: VisuDialogs.Tastierino numerico

      • Usa un'altra variabile: PLC_PRG.Pos_Axis.a.a0 e PLC_PRG.Pos_Axis.a.a1 e PLC_PRG.Pos_Axis.a.a2 e PLC_PRG.Pos_Axis.a.a3

  9. Etichetta gli elementi di visualizzazione con il Etichetta elemento.

Avvio e test del programma

È possibile modificare i valori degli assi nella visualizzazione del progetto. Se si commenta il comando di movimento attivo (MoveAbs..., ...) nel programma PLC_PRG e rimuovere i commenti del secondo comando di spostamento, quindi è possibile modificare le coordinate cartesiane.

  1. Compila il progetto e scaricalo nel PLC.

  2. Apri l'editor dell'oggetto Depictor nel tuo progetto.

  3. Passare alla visualizzazione e modificare i valori degli assi oi valori cartesiani. Osserva il movimento del robot SCARA in Depictor.